/* 
 * File:   cubeta.h
 * Author: jesus
 *
 * Created on 9 de junio de 2010, 1:47
 */

#include <iostream>
#include <fstream>
#ifndef _CUBETA_H
#define	_CUBETA_H

class ErrorCompartimentoLLeno{};


template<class T, int tamCubeta>

class Cubeta{
    T datos[tamCubeta];
    int nDatos;
public:
    Cubeta();
    Cubeta(unsigned &tamCub);
    ~Cubeta();
    int numDatos(){return nDatos;}
    bool insertar(T &dato);
    bool eliminar(T &dato);
    T & buscar(T&dato);
    T & leer(int pos);
    
};
Cubeta::Cubeta(){
    tamCubeta=3;
    nDatos=0;
}
Cubeta::Cubeta(unsigned &tamCub){
    
    tamCubeta=tamCub;
    /*Rellenamos una cubeta con el valor '0' para saber que está vacia
    for(unsigned i=0;i<tamCubeta;i++)
    datos[i]=0;*/

    nDatos=0;
}

bool Cubeta::insertar(T &dato){

    if(nDatos=tamCubeta) throw ErrorCompartimentoLLeno();
    else{
        ++nDatos;
        datos[nDatos]=dato;
        
    }
}

bool Cubeta::eliminar(T &dato){
    bool result;
    int i;
    //Cubeta vacia
    if(nDatos=<0) result=false;
    //Cubeta con elementos
    else{
        for(i=0;i<numDatos || result==false;i++){
            if(datos[i]==dato){
                datos[i]=NULL;
                numDatos--;
                result=true;                
            }
        }        
    }
    return result;
}
T & Cubeta::buscar(T &dato){
    T &result;
    bool encontrado=false;
    int i;
    //Cubeta vacia
    if(nDatos=<0) result=false;
    //Cubeta con elementos
    else{
        for(i=0;i<numDatos || encontrado==false;i++){
            if(datos[i]==dato){
                result=datos[i];              
                encontrado=true;
            }
        }
    }
    return result;
}
T & Cubeta::leer(int pos){
    T &result;
    int i;
    //Cubeta vacia
    if(nDatos=<0) result=false;
    else{
        if(pos>nDatos)result=false;
    //Cubeta con elementos
        else{
            result=datos[i];
            
            }
        }
    
    return result;
}
#endif	/* _CUBETA_H */

